package com.hejing.io流概述.FileStream;

import org.junit.Test;

import java.io.*;

/**
 * ClassName: FileStreamTest
 * Package: com.hejing.io流概述.FileStream
 * Description:
 *
 * @Author: HeJing
 * @Create: 2023-05-31 23:08
 * @Version: 1.0
 */
public class FileStreamTest {
    /**
     * 需求: 复制一份p1.png文件，命名为p1_copy.png文件
     *
     */
    @Test
    public void test01(){
        FileInputStream fis = null;
        FileOutputStream fos = null;

        try {
            // 1、创建相关的File类的对象。
            File srcFile = new File("D:\\HeJing_Java\\io_test\\image_test\\p1.png");
            File destFile = new File("D:\\HeJing_Java\\io_test\\image_test\\p1_copy.png");

            // 2、创建相关的字节流。
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);

            // 3、数据的读入和写出。
            byte[] buffer = new byte[1024];
            int size = -1;  // 记录每次读入到buffer中的字节数
            while((size = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, size);
            }
            System.out.println("复制成功...");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 4、关闭资源。
            try {
                if (fis != null)
                    fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fos != null)
                    fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 需求: 使用字节流的形式 复制一份hello.txt文件，命名为 hello_copy.txt文件
     */
    @Test
    public void test02(){
        FileInputStream fis = null;
        FileOutputStream fos = null;

        try {
            // 1、创建File对象，指明待复制的文件的路径以及 复制的目的文件路径
            File file_src = new File("D:\\HeJing_Java\\io_test\\hello.txt");
            File file_copy = new File("D:\\HeJing_Java\\io_test\\hello_copy.txt");

            // 2、创建输入流、输出流对象
            fis = new FileInputStream(file_src);
            fos = new FileOutputStream(file_copy);

            // 3、读取待复制文件的内容:
            int size = -1;
            byte[] cbuffer = new byte[1024];
            while((size = fis.read(cbuffer)) != -1) {
                // 4、将读取到的内容保存到指定的文件中
                // 方式1:
                /*char[] buffer = new char[size];
                for(int i = 0; i < size; i++) {
                    buffer[i] = cbuffer[i];
                }
                fw.write(buffer);*/

                // 方式2: 与方式1一样
                // write(char[] cbuffer, int fromIndex, int len)
                fos.write(cbuffer, 0, size);
            }

            System.out.println("复制成功...");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 5、关闭流资源
            try {
                if (fis != null)
                    fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(fos != null)
                    fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}





















